/******************************************************************
Copyright © Deng Zhimao Co., Ltd. 1990-2021. All rights reserved.
* @projectName   15_videoplayer
* @brief         mainwindow.h
* @author        Deng Zhimao
* @email         1252699831@qq.com
* @net           www.openedv.com
* @date          2021-04-27
*******************************************************************/
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include "canMsg.h"
#include <QMainWindow>
#include <QMediaPlayer>
#include <QMediaPlaylist>
#include <QPushButton>
#include <QSlider>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QListWidget>
#include <QLabel>
#include <QSpacerItem>
#include <QVideoWidget>
#include <QDebug>
#include <QCanBusDevice>
#include <QString>


/************ header for can ********/
#include <linux/can.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <net/if.h>
#include <sys/ioctl.h>
#include <linux/can/raw.h>
#include <unistd.h>
/************ end of header for can ********/


/************** can device info ***********/

/* 媒体信息结构体 */
struct MediaObjectInfo {
    /* 用于保存视频文件名 */
    QString fileName;
    /* 用于保存视频文件路径 */
    QString filePath;
};

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

protected:
    /******** can device fd *********/
    int can_fd;

private:
    /* 媒体播放器，用于播放视频 */
    QMediaPlayer *videoPlayer;

    /* 媒体列表 */
    QMediaPlaylist *mediaPlaylist;

    /* 视频显示窗口 */
    QVideoWidget *videoWidget;

    /* 视频列表 */
    QListWidget *listWidget;

    /* 播放进度条 */
    QSlider *durationSlider;

    /* 音量条 */
    QSlider *volumeSlider;

    /* 视频播放器按钮 */
    QPushButton *pushButton[6];

    /* 水平容器 */
    //test2023
    QWidget *hWidget[3];

    /* 标签文本 */
    QLabel *label[2];

    /* 垂直容器 */
    QWidget *vWidget[2];

    /* gridwdiget */
    QWidget* gWidget;

    /* 水平布局 */
    QHBoxLayout *hBoxLayout[3];

    /* Grid Layout */
    QGridLayout* GridLayout;

    /* 垂直界面 */
    QVBoxLayout *vBoxLayout[2];

    /* CAN 设备 */
    //QCanBusDevice *canDevice;



    /* 视频布局函数 */
    void videoLayout();

    /* 主窗体大小重设大小函数重写 */
    void resizeEvent(QResizeEvent *event);

    /* 媒体信息存储 */
    QVector<MediaObjectInfo> mediaObjectInfo;

    /* 扫描本地视频文件 */
    void scanVideoFiles();

    /* 媒体初始化 */
    void mediaPlayerInit();


    /********************** Can ****************************/
    int canInit(const char *pcCanName, E_CAN_BAUDRATE iBaudrateIndex, E_CAN_TYPE iCanType);
    int canRecv(int can_fd, T_CAN_MSG *frame, uint32_t timeout_ms);//, uint32_t timeout_ms);
    int canSend(int can_fd, T_CAN_MSG* can_send_frame);
    /******************************************************/


private slots:
    /* 播放按钮点击 */
    void btn_playsetting_clicked();

    /* backlight add */
    void btn_backlight_add_clicked();

    /* backlight minus */
    void btn_backlight_minus_clicked();

    /* 音量加 */
    void btn_heightup_clicked();

    /* 音量减 */
    void btn_heightdown_clicked();

    /* click logo */
    void btn_logo_clicked();

    /* 媒体状态改变 */
    void mediaPlayerStateChanged(QMediaPlayer::State);

    /* 列表单击 */
    void listWidgetCliked(QListWidgetItem*);

    /* 媒体列表项改变 */
    void mediaPlaylistCurrentIndexChanged(int);

    /* 媒体总长度改变 */
    void musicPlayerDurationChanged(qint64);

    /* 媒体播放位置改变 */
    void mediaPlayerPositionChanged(qint64);

    /* 播放进度条松开 */
    void durationSliderReleased();

    /* 音量条松开 */
    void volumeSliderReleased();
};
#endif // MAINWINDOW_H
